import Vue from 'vue'
import App from './app.vue'
import router from "./router"
import axios from 'axios'
import filter from "./filter/filter";

Vue.config.productionTip = false
// Vue.prototype.xxx 可以理解为Vue组件的全局变量。
// 可以在任意Vue组件中，使用this.xxx来获取这个值
// $ 是代表Vue全局属性的一个约定
Vue.prototype.$axios = axios

//  解决每次ajax请求, 对应的sessionId不一致的问题
axios.defaults.withCredentials = true

/**
 * axios拦截器(打印日志)
 */
axios.interceptors.request.use(function (config) {
  console.log('请求参数：', config)
  //  给请求头增加token参数
  let token = Tool.getLoginUser().token
  if (Tool.isNotEmpty(token)) {
    console.log('token :' + token)
    config.headers.token = token
  }
  return config
}, error => {
  return Promise.reject(error)
})
axios.interceptors.response.use(function (response) {
  console.log('返回结果：', response)
  return response
}, error => {

  if (error.response.status === 504 || error.response.status === 404) {
    Toast.error('服务器被吃了o(╯□╰)o')
  } else if (error.response.status === 403) {
    Toast.error('权限不足，请联系管理员！')
  } else if (error.response.status === 401) {
    Tool.setLoginUser(null)
    //  跳转回登录页面
    router.push({path: '/login', query: {status: '401'}})
  } else {
    if (error.response.data.message) {
      Toast.error(error.response.data.message)
    } else {
      Toast.error('未知错误！')
    }
  }
  return {
    data: { // 将后端的返回结果替换成以下形式
      success: false,
      message: '请重新登录'
    }
  }
});

/**
 * 全局过滤器
 */
Object.keys(filter).forEach(key => {
  Vue.filter(key, filter[key])
})

/**
 * 路由登录拦截
 */
router.beforeEach((to, from, next) => {
  //  要不要对meta.loginRequire属性做监控拦截(该属性在router的index中设置)
  if (to.matched.some(item => item.meta.loginRequire)) {
    let loginUser = Tool.getLoginUser()
    if (Tool.isEmpty(loginUser)) {
      next('/login')
    } else {
      next()
    }
  } else {
    next()
  }
})

new Vue({
  router,
  render: h => h(App),
}).$mount('#app')
